[id].tsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { useParams } from 'common'
  2. import { PageContainer } from 'ui-patterns/PageContainer'
  3. import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
  4. import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
  5. import { ColumnList } from '@/components/interfaces/Database/Tables/ColumnList'
  6. import DeleteConfirmationDialogs from '@/components/interfaces/TableGridEditor/DeleteConfirmationDialogs'
  7. import { SidePanelEditor } from '@/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor'
  8. import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout'
  9. import DefaultLayout from '@/components/layouts/DefaultLayout'
  10. import { PageLayout } from '@/components/layouts/PageLayout/PageLayout'
  11. import { useTableEditorQuery } from '@/data/table-editor/table-editor-query'
  12. import { isTableLike } from '@/data/table-editor/table-editor-types'
  13. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  14. import { useTableEditorStateSnapshot } from '@/state/table-editor'
  15. import { TableEditorTableStateContextProvider } from '@/state/table-editor-table'
  16. import type { NextPageWithLayout } from '@/types'
  17. const DatabaseTables: NextPageWithLayout = () => {
  18. const snap = useTableEditorStateSnapshot()
  19. const { id: _id, ref } = useParams()
  20. const id = _id ? Number(_id) : undefined
  21. const { data: project } = useSelectedProjectQuery()
  22. const { data: selectedTable, isPending: isLoading } = useTableEditorQuery({
  23. projectRef: project?.ref,
  24. connectionString: project?.connectionString,
  25. id,
  26. })
  27. return (
  28. <>
  29. <PageLayout
  30. title={isLoading ? <ShimmeringLoader className="w-40" /> : (selectedTable?.name ?? '')}
  31. breadcrumbs={[
  32. {
  33. label: 'Tables',
  34. href: `/project/${ref}/database/tables`,
  35. },
  36. ]}
  37. size="large"
  38. >
  39. <PageContainer size="large">
  40. <PageSection>
  41. <PageSectionContent>
  42. <ColumnList
  43. onAddColumn={snap.onAddColumn}
  44. onEditColumn={snap.onEditColumn}
  45. onDeleteColumn={snap.onDeleteColumn}
  46. />
  47. </PageSectionContent>
  48. </PageSection>
  49. </PageContainer>
  50. </PageLayout>
  51. {project?.ref !== undefined && selectedTable !== undefined && isTableLike(selectedTable) && (
  52. <TableEditorTableStateContextProvider
  53. key={`table-editor-table-${selectedTable.id}`}
  54. projectRef={project?.ref}
  55. table={selectedTable}
  56. >
  57. <DeleteConfirmationDialogs selectedTable={selectedTable} />
  58. <SidePanelEditor includeColumns selectedTable={selectedTable} />
  59. </TableEditorTableStateContextProvider>
  60. )}
  61. </>
  62. )
  63. }
  64. DatabaseTables.getLayout = (page) => (
  65. <DefaultLayout>
  66. <DatabaseLayout title="Tables">{page}</DatabaseLayout>
  67. </DefaultLayout>
  68. )
  69. export default DatabaseTables